import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { getUserProfile, login, getUserDetailById } from '@/api/user'
export default {
  namespaced: true,
  state: {
    // 初始化 不能直接给个null 应该先去缓存里面查一下 有没
    // 有  有的话直接使用缓存中的 没有的话 就是undefined或
    // 者null(getToken方法返回一个null 这里就是null)  然后登录 获取到token 设置token
    token: getToken(),
    userInfo: {} // 这里为什么不用null?  因为null. 点一个属性  报错
  },
  mutations: {
    // 更新token
    setToken(state, payload) {
      state.token = payload // 添加到vuex
      setToken(payload) // 添加到本地缓存
    },
    // 退出登录时
    removeToken(state) {
      state.token = null // vuex 中删除
      removeToken() // 本地缓存中删除
    },
    // 更新userinfo
    setUserInfo(state, userinfo) {
      // 响应式的更新一个对象
      state.userInfo = userinfo
      // state.userInfo.name = value  //只更新一个属性   不是响应式
      // state.userinfo = {...state.userInfo, ...userinfo}   响应式
    },
    // 删除用户基本资料
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    async login(context, data) {
      const ret = await login(data)
      // 登录成功  取token(ret.data.data)
      context.commit('setToken', ret)
      // 设置登录的时间戳
      setTimeStamp()
    },
    // 获取用户信息
    async getUserInfo(context) {
      const ret = await getUserProfile()
      // 获取用户的基本信息  现在写它 完全是为了显示头像
      const detailRet = await getUserDetailById(ret.userId)
      // console.log(detailRet)
      // 将两个ret对象合并为一个  更新到userInfo里
      context.commit('setUserInfo', { ...ret, ...detailRet })
      // console.log(ret)
      return ret // 这里写return  后面需要用
    },
    logout(context) {
      context.commit('removeToken')
      context.commit('removeUserInfo')
    }
  }
}
